import axios from 'axios'
import store from '../store'
import router from '@/router'
const request = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0/'
})

// 添加请求拦截器
request.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  if (store.state.user.token && config.url !== 'authorizations') {
    // config.headers 是个对象：{}=> 追加
    config.headers.Authorization = 'Bearer ' + store.state.user.token
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  const _data = {
    status: response.status,
    data: response.data.data
  }
  return _data
}, async function (error) {
  // 对响应错误做点什么
  console.dir(error)
  const loginPath = `/login?redirectUrl=${router.currentRoute.path}`
  try {
    // 1. 未登录
    const { user } = store.state
    if (!user.token || !user.refresh_token) {
      throw new Error('未登录')
    }
    // 3.登录 但token过期
    const { data } = await request({
      url: 'authorizations',
      method: 'put',
      headers: {
        Authorization: `Bearer ${user.refresh_token}`
      }
    })
    console.log(data)
    store.commit('setUser', { token: data.token, refresh_token: user.refresh_token })
    return request(error.config)
  } catch (error) {
    // 2.登录
    router.replace(loginPath)
    return Promise.reject(error)
  }
})

export default request
